#!/usr/bin/env python3
# -*- coding:utf-8 -*-
# @Time: 2019/7/30  9:55
# @Author: 余浪人
# @email: yulangren520@gmail.com
import re, json, math
from functools import wraps
from flask import request, jsonify
from apps.lib.cache_sys import sys_cache
from apps.lib.public import redis_, private_untie
from apps.setting import Config
from apps.models.synthesize_model import TL_WebApp_Model
def notNull (O00O0OO0O000O000O :str ):
    if O00O0OO0O000O000O :
        return O00O0OO0O000O000O
    return ''
def apiErrors (OOOO0OO000O0O0OOO ):

    if OOOO0OO000O0O0OOO is None :
        return jsonify ({"status":400 ,"msg":"数据有误,验证失败!"})
def page_auto (O0O0O000OO00OO0OO ,OOO0O0O0OO0O000OO :int ,OOO0OOOO0OO0OO0O0 :int =0 ):
    try :
        if request .method =='POST':
            OOOO0O00O000OO00O =int (request .form .get ('page',1 ))
        else :
            OOOO0O00O000OO00O =int (request .args .get ('page',1 ))
        if OOOO0O00O000OO00O <=0 :OOOO0O00O000OO00O =1
    except :
        OOOO0O00O000OO00O =1
    if OOO0OOOO0OO0OO0O0 !=0 and OOOO0O00O000OO00O >OOO0OOOO0OO0OO0O0 :OOOO0O00O000OO00O =OOO0OOOO0OO0OO0O0
    if O0O0O000OO00OO0OO .count ()<OOO0O0O0OO0O000OO :
        OOO0O0O0OO0O000OO =O0O0O000OO00OO0OO .count ()
    try :
        OO0O00O0OOOOOO0OO =math .ceil (O0O0O000OO00OO0OO .count ()/OOO0O0O0OO0O000OO )
    except :
        OO0O00O0OOOOOO0OO =1
    if OO0O00O0OOOOOO0OO <OOOO0O00O000OO00O :OOOO0O00O000OO00O =1
    O0OO0OOOOO00OOOO0 =O0O0O000OO00OO0OO .paginate (OOOO0O00O000OO00O ,OOO0O0O0OO0O000OO )
    return O0OO0OOOOO00OOOO0 .items ,O0OO0OOOOO00OOOO0
def img (O00OO0OOO00O0000O ,OO0OO00000O000OOO :str ):
    if O00OO0OOO00O0000O :
        return O00OO0OOO00O0000O
    O0O0OOOOOO0O00O00 =''.join (re .findall ('<img.*src="(.*?\..*?)"',OO0OO00000O000OOO .lower (),flags =re .S )[:1 ])
    return O0O0OOOOOO0O00O00
def content (O0OO000000O00O0O0 :list ,O0OOO00000O000OOO ='%m-%d'):
    OOOO00OOO00OO000O =[{"title":O0000O000OOOOOO0O .title ,'ID':O0000O000OOOOOO0O .uuid ,'update_time':O0000O000OOOOOO0O .update_time .strftime (O0OOO00000O000OOO ),'title_color':O0000O000OOOOOO0O .title_color ,'imgUrl':img (O0000O000OOOOOO0O .thumb_img ,O0000O000OOOOOO0O .content ),'PID':O0000O000OOOOOO0O .pro .column_name ,'PID_ID':O0000O000OOOOOO0O .pro .uuid ,'author':O0000O000OOOOOO0O .author ,'clicks':O0000O000OOOOOO0O .clicks ,'contributor':O0000O000OOOOOO0O .contributor ,'description':O0000O000OOOOOO0O .description ,'column_link':O0000O000OOOOOO0O .pro .column_link ,'comment_num':len (O0000O000OOOOOO0O .comment_model )}for O0000O000OOOOOO0O in O0OO000000O00O0O0 if O0000O000OOOOOO0O .status ==1 ]
    return OOOO00OOO00OO000O
def redis_cli (O0O0OOOOO0OOO00O0 ,O000OOOO000O0O000 ,OOO0OOO00OOO0O00O =60 ):
    O00OO0OO00OO000OO =redis_ ()
    O00OO0OO00OO000OO .set (O0O0OOOOO0OOO00O0 ,json .dumps (O000OOOO000O0O000 ),OOO0OOO00OOO0O00O )
def click_up (OO0OO0OOOOO00O0OO ):
    def O00O0OOO000O000OO (*OOO0OO0OOOOOO0000 ,**OO0OO0O00O0O0OO0O ):
        OOO0O0O0O0O00000O =OO0OO0OOOOO00O0OO (*OOO0OO0OOOOOO0000 ,**OO0OO0O00O0O0OO0O )
        try :
            from apps .models .content_model import Content_Model ,db
            O0O00O0O00OO000OO =request .json .get ('pid')if request .is_json else request .form .get ('pid')
            OOOO00O0OOO00OO00 =Content_Model .query .filter_by (uuid =O0O00O0O00OO000OO ,status =1 ).first ()
            OOOO00O0OOO00OO00 .set_attrs ({'clicks':OOOO00O0OOO00OO00 ['clicks']+1 })
            db .session .commit ()
        except :
            pass
        return OOO0O0O0O0O00000O
    return O00O0OOO000O000OO
def authority (OO0000OOO00O0OOO0 ):
    @wraps (OO0000OOO00O0OOO0 )
    def O000OO000OO00000O (*O0000000000O0OO00 ,**O0OOOOO0O00OOOO00 ):
        try :
            OO000OO00OO0OOOO0 =sys_cache ()
            if not OO000OO00OO0OOOO0 .web_on_off :return jsonify ({"status":1 ,"msg":"站点未开启,请求失败!","tipsMsg":OO000OO00OO0OOOO0 .web_close_tips })
            O0O0000OOOO0O0O00 =request .headers .get ('csrf-token')
            if not O0O0000OOOO0O0O00 :return jsonify ({"status":1 ,"msg":"身份验证失败,请添加身份!"})
            OO0O000OOO0O0000O =TL_WebApp_Model .query .first ()
            if OO0O000OOO0O0000O .status ==0 :return jsonify ({"status":1 ,"msg":"数据接口未开启!"})
            if OO0O000OOO0O0000O .private_code !=private_untie (OO0O000OOO0O0000O .private_pem ,O0O0000OOOO0O0O00 ):return jsonify ({"status":1 ,"msg":"身份授权验证失败,授权码错误!"})
            OOO0O0O00OO0O00O0 =OO0000OOO00O0OOO0 (*O0000000000O0OO00 ,**O0OOOOO0O00OOOO00 )
        except :
            return jsonify ({"status":1 ,"msg":"接口权限验证异常,请联系网站管理员!"})
        return OOO0O0O00OO0O00O0
    return O000OO000OO00000O
def conmmentAuthority (O0O00O0OO0OO0000O ):
    @wraps (O0O00O0OO0OO0000O )
    def OOO0O000O0O0OOOO0 (*OO00O0O0O0O0000OO ,**O0OO000OOO0OO00OO ):
        O00OOOOO000000000 =sys_cache ()
        if not O00OOOOO000000000 .web_content_on_off :return jsonify ({"status":1 ,"msg":"评论功能未开启,评论失败!"})
        OO00OOO000O00OO00 =O0O00O0OO0OO0000O (*OO00O0O0O0O0000OO ,**O0OO000OOO0OO00OO )
        return OO00OOO000O00OO00
    return OOO0O000O0O0OOOO0
def ipAdd (O00OO00OOO0O00OO0 ):
    @wraps (O00OO00OOO0O00OO0 )
    def O0O0O00O0O000OO0O (*O0O0O0OO0OO0OO00O ,**O000O000OOO00O0O0 ):
        OOO00000O00000000 =request .remote_addr
        O0OOO000O0OOOOOO0 =redis_ (2 )
        O0O0OO0O0O0O00O0O =O0OOO000O0OOOOOO0 .get (OOO00000O00000000 )
        if not O0O0OO0O0O0O00O0O :
            OOOOO000O00OO0O00 ={"IP":OOO00000O00000000 ,"count":1 }
            O0OOO000O0OOOOOO0 .set (OOO00000O00000000 ,json .dumps (OOOOO000O00OO0O00 ),60 )
        else :
            if O0OOO000O0OOOOOO0 .ttl (OOO00000O00000000 )>2 :
                OO0000O0OOO0O000O =json .loads (O0O0OO0O0O0O00O0O )
                OOOOO000O00OO0O00 ={"IP":OOO00000O00000000 ,"count":OO0000O0OOO0O000O ['count']+1 }
                O0OOO000O0OOOOOO0 .set (OOO00000O00000000 ,json .dumps (OOOOO000O00OO0O00 ),O0OOO000O0OOOOOO0 .ttl (OOO00000O00000000 )-1 )
        O00O0O0O0OO0OO0OO =O00OO00OOO0O00OO0 (*O0O0O0OO0OO0OO00O ,**O000O000OOO00O0O0 )
        return O00O0O0O0OO0OO0OO
    return O0O0O00O0O000OO0O
def ipAuthority (O0OO000OOOOOO0000 ):
    @wraps (O0OO000OOOOOO0000 )
    def OO0OOOOOO00OO0OOO (*OO0OO00O0O00O0O00 ,**OOOO00OO0O0O000OO ):
        O0OOO0000OO0000OO =request .remote_addr
        O0OOOO0OOOOOOOO0O =redis_ (2 )
        OO0OO00OOOO000O00 =redis_ (3 )
        OO0000OOOOO0O0OO0 =O0OOOO0OOOOOOOO0O .get (O0OOO0000OO0000OO )
        if OO0000OOOOO0O0OO0 :
            O0OO0OOO00OO000O0 =json .loads (OO0000OOOOO0O0OO0 )
            if O0OO0OOO00OO000O0 ['count']==Config .MAX_NUM :
                OO0OO00OOOO000O00 .set (O0OOO0000OO0000OO ,json .dumps (O0OOO0000OO0000OO ),Config .RESTRICT_TIME *60 )
                O0OOOO0OOOOOOOO0O .delete (O0OOO0000OO0000OO )
                return jsonify ({"status":1 ,"msg":"访问过快,超过网站限制频率!稍稍休息,可继续访问哟"})
        if OO0OO00OOOO000O00 .get (O0OOO0000OO0000OO ):return jsonify ({"status":1 ,"msg":"访问过快,超过网站限制频率,限制访问!稍稍休息,可继续访问哟"})
        OOO0OO00O00000O0O =redis_ (4 )
        if OOO0OO00O00000O0O .hget ('forbid_ip',O0OOO0000OO0000OO ):return jsonify ({"status":1 ,"msg":"访问拒绝,限制访问!"})
        OO00OOO00OO0OO00O =O0OO000OOOOOO0000 (*OO0OO00O0O00O0O00 ,**OOOO00OO0O0O000OO )
        return OO00OOO00OO0OO00O
    return OO0OOOOOO00OO0OOO
def nav_list (O0000OO0OO0OOO000 :list ,O0OOOOOO00O0000O0 :int =0 ):
    O0O000OOOO00O0OOO =[{'column_name':O00O0O00O0OO0O000 .column_name ,'column_link':O00O0O00O0OO0O000 .column_link ,'column_ID':O00O0O00O0OO0O000 .uuid ,'dataList':nav_list (O0000OO0OO0OOO000 ,O00O0O00O0OO0O000 ['id'])}for O00O0O00O0OO0O000 in O0000OO0OO0OOO000 if O00O0O00O0OO0O000 ['column_parent_id']==O0OOOOOO00O0000O0 ]
    return O0O000OOOO00O0OOO
